char *p =new char[..]

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:16:33
如果用char *p = new char [9]开辟一个空间;
引用他的每个元素是p[0],p[1]对吗
p不是一个指针吗,为什么不是*p[0],*p[1]

p是指针,它的值是new出来空间的首地址
可以用p[0],p[1]
也可以用*p,*(p+1)

引用每个元素是p[0]到p[8],也可以是*(p+0)......*(p+8)。p是指向起始地址的指针,相当于&p[0].指针也可以表示数组元素,就是用首地址加上偏移量,比如p[n]=*(p+n).但是你这个用法*p[0],*p[1]就是四不像了,指针就指针,数组就数组,你的用法都包含了。其实在编译的时候,数组也要用指针表示,用指针速度更快一些。如果用数组的话,比如引用p[2],在编译的时候要经过确定首地址是p,偏移量是2,在定位到p+2这个地址,然后取保存在这个地址的数据*(p+2),所以速度比直接用*(p+2)慢一些。

p是个指针,指向的是开辟的地址的首地址
int a[3];
int *p = a;
可以这样访问数组阿a[i],也可以p[i],*(p+i);

*p[0],*p[1]也就是*a[0],*a[1],看这样对吗?

C++和C内部都使用指针来处理数组,所以数组和指针基本等价是C++和C的优点之一。
所以在这里是可以直接用p[n]来表示数组成员变量的。而且在C++中,不仅是char数组指针,就是int,float等其它类型的数组,也可以用这种方式引用。
在C++中很多原来C中不允许的做法都可以实现了。现在使用C++比C语言方便很多。

*p[0]是啥?
搞清楚数组名和指针的区别。

char arr[10] = "abcd";
char *p = arr;
用指针怎么找元素? 是*p[0]么?显然不是。